package com.itheima.d2_xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 * 目标：掌握使用Dom4j框架解析XML文件。
 */
public class Dom4JTest1 {
    public static void main(String[] args) throws Exception {
        //TODO 将xml文件夹中的users.xml内容解析出来

        // 1、创建一个Dom4J框架提供的解析器对象
        SAXReader saxReader = new SAXReader();
        // 2、使用saxReader对象把需要解析的XML文件读成一个Document对象。
        Document doc = saxReader.read("day11properties-xml-log-thread/xml/books.xml");
        // 3、从文档对象中解析元素内容
        Element rootElement = doc.getRootElement();//获取文档的根标签
        // System.out.println("rootElement = " + rootElement);
        // 3.1、获取根元素下的全部一级子元素。
        //String name = rootElement.getName();
        //System.out.println(name);
        List<Element> elements = rootElement.elements("book");
        elements.forEach(s -> System.out.println(s.getName()));
        // 3.2、获取当前元素下的某个子元素。
        List<Element> books = rootElement.elements("book");
//        for (Element book : books) {
//            //获取book中的子标签
//            System.out.println(book.element("name"));
//            System.out.println(book.element("author"));
//            System.out.println(book.element("sale"));
//        }

        // 4、获取元素的属性信息呢？
        List<Element> books2 = rootElement.elements("book");
        for (Element bookElement : books2) {
            String id = bookElement.attributeValue("id");
            //直接获取子元素中的文本数据
            String name = bookElement.elementText("name");
            String author = bookElement.elementText("author");
            String sale = bookElement.elementText("sale");
            System.out.println(name+","+author+","+sale);
        }

        //通过gettext获取文本
        List<Element> books3 = rootElement.elements("book");
        for (Element element : books3) {
            //Element name = element.element("name");
            List<Element> allchildren = element.elements();
            for (Element allchild : allchildren) {
                System.out.println(allchild.getText());
            }
        }

    }



}
